package cn.ywang.serial;

import java.io.Serializable;

/**
 * 反序列化导致单例被破坏
 *
 * @Auther: BeatificWang
 * @Date: 2018/9/23 21:47
 */
public class Serial implements Serializable {

	// 序列化：把对象转换为字节序列的过程称为对象的序列化
	// 对象转为IO流，然后转换为字节码
	// 场景：
	// 将内存中的对象状态保存到一个文件中或者数据库中时候；
	// 使用套接字在网络上传送对象的时候；
	// 通过RMI（Remote Method Invocation）传输对象的时候；
	// 实现：实现Serializable接口即可

	// 反序列化：把字节序列恢复为对象的过程称为对象的反序列化
	// 持久化的字节码内容转换为IO流，然后转换为对象

	private Serial() {
	}

	private static final Serial INSTANCE = new Serial();

	public static Serial getInstance() {
		return INSTANCE;
	}

	// 防止在反序列化时重新new对象
	// 反序列化时 ObjectInputStream 会调用readOrdinaryObject方法，然后 	Object rep = desc.invokeReadResolve(obj);
	// 也就是说会调用自定义的readResolve方法
	public Object readResolve() {
		return INSTANCE;
	}
}
